package lucava.metamodel.java;

import lucava.metamodel.java.visitor.IJavaMetaModelVisitor;

/**
 * Visibilité d'un élement du MetaModelJava.
 */
public class Visibility {

	/**
	 * Valeur constante de la visibilité 'private'.
	 */
	public static final String PRIVATE = "private";

	/**
	 * Valeur constante de la visibilité 'protected'.
	 */
	public static final String PROTECTED = "protected";

	/**
	 * Valeur constante de la visibilité 'public'.
	 */
	public static final String PUBLIC = "public";

	/**
	 * Visibilité de l'élément du MetaModelJava.
	 */
	protected String mVisibility = PROTECTED;

	/**
	 * Assigne la visibilité 'private' à l'élément.
	 */
	public void setPrivate() {
		this.mVisibility = PRIVATE;
	}

	/**
	 * Assigne la visibilité 'protected' à l'élément.
	 */
	public void setProtected() {
		this.mVisibility = PROTECTED;
	}

	/**
	 * Assigne la visibilité 'public' à l'élément.
	 */
	public void setPublic() {
		this.mVisibility = PUBLIC;
	}

	/**
	 * Indique si l'élément est 'private'.
	 */
	public boolean isPrivate() {
		return this.mVisibility.equals(PRIVATE);
	}

	/**
	 * Indique si l'élément est 'protected'.
	 */
	public boolean isProtected() {
		return this.mVisibility.equals(PROTECTED);
	}

	/**
	 * Indique si l'élément est 'public'.
	 */
	public boolean isPublic() {
		return this.mVisibility.equals(PUBLIC);
	}

	/**
	 * Retourne la valeur de la visibilité de l'élément.
	 */
	public String getVisibility() {
		return this.mVisibility;
	}

	/**
	 * Méthode d'acceptation du visiteur de MetaModelJava.
	 * 
	 * @param aVisitor
	 *            , Visiteur de MetaModelJava.
	 */
	public void accept(IJavaMetaModelVisitor aVisitor) {
		aVisitor.visitVisibility(this);
	}
}
